#include "tim.h"

void TIM4_Init(uint16_t per, uint16_t psc)
{
	GPIO_InitTypeDef GPIO_InitStruct;   //定义GPIO结构体变量
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;   //定义定时器结构体变量
	TIM_OCInitTypeDef TIM_OCInitStruct;   //定义输出比较结构体变量
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);   //GPIOB时钟使能
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);   //使能TIM3的时钟
	
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;   //配置GPIO第6引脚
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;   //配置GPIO为复用推挽输出
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;   //配置GPIO速率
	GPIO_Init(GPIOB,&GPIO_InitStruct);   //GPIO初始化函数
	
	TIM_TimeBaseInitStruct.TIM_Period=per;   //设置自动重装载的周期值
	TIM_TimeBaseInitStruct.TIM_Prescaler=psc;   //设置预分频值
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;   //向上计数模式
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;   //设置时钟分割
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);   //定时器初始化函数
	
	TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;   //PWM模式1
	TIM_OCInitStruct.TIM_Pulse=0;   //初始化占空比为0
	TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;   //输出比较极性低
	TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;   //比较输出使能
	TIM_OC1Init(TIM4,&TIM_OCInitStruct);   //比较输出初始化函数
	
	TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);   //输出比较1预装载寄存器使能
	
	TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;   //PWM模式1
	TIM_OCInitStruct.TIM_Pulse=0;   //初始化占空比为0
	TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;   //输出比较极性低
	TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;   //比较输出使能
	TIM_OC2Init(TIM4,&TIM_OCInitStruct);   //比较输出初始化函数
	TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);   //输出比较1预装载寄存器使能
	TIM_Cmd(TIM4,ENABLE);   //TIM3使能
}

void TIM4_IRQHandler(void)   //TIM3中断服务函数
{
	if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)   //判断是否触发TIM3更新中断
	{
		TIM_ClearITPendingBit(TIM4,TIM_IT_Update);   //清除TIM3更新中断标志位
	}
}
